//
//  EntryComment.m
//  My Dream Slapper
//
//  Created by Jason Harris on 8/24/06.
//  Copyright (c) 2006, Jason Harris and Geekspiff
//  All rights reserved.
//  
//  Redistribution and use in source and binary forms, with or without modification, are permitted provided
//  that the following conditions are met:
//  
//  Redistributions of source code must retain the above copyright notice, this list of conditions and the
//  following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list
//  of conditions and the following disclaimer in the documentation and/or other materials provided with the
//  distribution. Neither the name of Jason Harris, Geekspiff, nor the names of its contributors may be used
//  to endorse or promote products derived from this software without specific prior written permission.
//  
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
//  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
//  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
//  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
//  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
//  POSSIBILITY OF SUCH DAMAGE.
//

#import "EntryComment.h"


@implementation EntryComment

- (void)awakeFromInsert
{
	[super awakeFromInsert];
	[self setValue: [NSDate date] forKey: @"createdDate"];
}


- (void)setRtfdComment: (NSData *)rtfdComment
{
	[self willChangeValueForKey: @"rtfdComment"];
	[self setPrimitiveValue: rtfdComment forKey: @"rtfdComment"];
	[self didChangeValueForKey: @"rtfdComment"];
	
	NSAttributedString *as = [[[NSAttributedString alloc] initWithRTFD: rtfdComment documentAttributes: nil] autorelease];
	[self setValue: [as string] forKey: @"comment"];
}


- (NSString *)fullName
{
	if (_validating) return nil;
    NSString *fullName;
    
    [self willAccessValueForKey: @"fullName"];
    fullName = [self primitiveValueForKey: @"fullName"];
    if ( nil == fullName )
    {
		NSError *error;
        NSNumber *sqlUserID = [self valueForKey: @"sqlUserID"];
		MyManagedObjectContext *moc = [self managedObjectContext];
		NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
		NSEntityDescription *entity = [NSEntityDescription entityForName: @"SQLUser" inManagedObjectContext: moc];
		[fetchRequest setEntity: entity];
		NSPredicate *predicate = [NSPredicate predicateWithFormat: @"id == %@", sqlUserID];
		[fetchRequest setPredicate: predicate];
		NSArray *foundEntries = [moc executeFetchRequest: fetchRequest error: &error];
		if ( !foundEntries && error )
			[NSException raise: NSGenericException format: @"%@", error];
		unsigned int count = [foundEntries count];
		if ( count > 0 )
		{
			if ( count != 1 )
				[NSException raise: NSGenericException format: @"a duplicate userID (%@) was found", sqlUserID];
			fullName = [[foundEntries lastObject] valueForKey: @"fullName"];
			[self setPrimitiveValue: fullName forKey: @"fullName"];
		}
    }
    [self didAccessValueForKey: @"fullName"];
    return fullName;
}

@end
